스트레티지 패턴
스트레티지 패턴의 정의
스트레티지 패턴이란 실행 중에 알고리즘을 선택할 수 있는 디자인 패턴이다. 스트레티지 패턴은 특정 계열들의 알고리즘들을 정의하고, 이 유사한 알고리즘들을 캡슐화한 후 알고리즘 변경이 필요할 때, 알고리즘을 직접 수정하는 게 아닌 교체하여 유연하게 확장하는 방법이다. 스트레티지 패턴은 전략 패턴이라고도 불린다.

스트레티지 패턴 예시 (java)
간단하게 덧셈, 뺄셈, 곱셈 연산을 스트레티지 패턴을 활용한 과정은 다음과 같다.
Strategy 인터페이스를 생성한다.
public interface Strategy {
public int doOperation(int num1, int num2);
}
Strategy 인터페이스에 세부적인 클래스들(덧셈, 뺄셈, 곱셈)을 생성한다.
/* 덧셈 */
public class OperationAdd implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
/* 뺄셈 */
public class OperationSubstract implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
/* 곱셈 */
public class OperationMultiply implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
Context 클래스를 생성한다.
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2){
return strategy.doOperation(num1, num2);
}
}
Context를 사용하여, Strategy를 변경하면 변화가 생기는지 확인한다.
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5)); // 10 + 5 = 15
context = new Context(new OperationSubstract());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); // 10 - 5 = 5
context = new Context(new OperationMultiply());
System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); // 10 * 5 = 50
}
}
스트레티지 패턴의 장단점
- 장점
- 요구사항이 변경되었을 때 기존의 코드를 변경하지 않고, 새로운 전략을 추가하는 방식으로 진행하면 되기때문에 SOLID 원칙 중
OCP (개방폐쇄의 원칙)을 준수할 수 있다.
- 요구사항이 변경되었을 때 기존의 코드를 변경하지 않고, 새로운 전략을 추가하는 방식으로 진행하면 되기때문에 SOLID 원칙 중
- 단점
- 세부적인 전략들은 모두 Strategy 인터페이스를 공유하기 때문에 Strategy 인터페이스를 통해 들어온 인자들을 다 사용하지 않아도 되나 전달받는 상황이 발생할 수 있다. 다시 말해, Strategy와 Context 간 의사소통 오버헤드가 있다.
나올 수 있는 면접 질문
- 스트레티지 패턴이란?
- 스트레티지 패턴의 장단점?
- 스트레티지 패턴이 적용되면 좋을 상황은?
- 하나의 클래스가 많은 행동들을 정의하고, 많은 조건문의 모습을 가질 때 Strategy 패턴을 적용하면 유용하다.
참고
- 스트레티지 패턴 정의 - 위키피디아
- 디자인 패턴 : 전략패턴이란? - kyle님 블로그
- 전략 패턴 ( Strategy Pattern ) - victolee님 블로그
- 스트래티지 패턴이란 - heejeong Kwon님 블로그
- Design Patterns - Strategy Pattern
GoF의 디자인 패턴 (Summary) / 10. 전략(Strategy) - scvgoe님 블로그Strategy 패턴 - Cory님 블로그- 전략 패턴 예시
기여자
Junho Moon
📦